// /**
//  * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
//  */
// package com.zjs.utils.crud;
//
// import cn.hutool.core.date.DateUtil;
// import com.baomidou.mybatisplus.core.metadata.TableInfo;
// import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
// import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
// import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
//
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.beans.factory.annotation.Autowired;
//
// import java.lang.reflect.Field;
// import java.util.Date;
// import java.util.Optional;
// import java.util.function.Function;
//
//
// /**
//  * 基于Mybatis-plus增删改查service基类
//  *
//  * @param <D>
//  * @param <T>
//  * @author weidongsheng
//  * @since 2020-02-09
//  */
// @Slf4j
// public abstract class CrudMapperService<D extends CrudMapper<T>, T extends BaseEntity<T>> {
//
//     /**
//      * 持久层对象
//      */
//     @Autowired
//     protected D dao;
//     /* ************************************service新增一个方法：修改或者新增：字段自动填充***************************** */
//
//     /**
//      * <p>
//      * TableId 注解存在更新记录，否插入一条记录
//      * </p>
//      *
//      * @param entity 实体对象
//      * @return int
//      */
//     public int insertOrUpdate(T entity) {
//         if (null != entity) {
//             Class<?> cls = entity.getClass();
//             // 获取表格相关信息
//             TableInfo tableInfo = TableInfoHelper.getTableInfo(cls);
//             // 判断主键是否存在
//             String keyProperty = tableInfo.getKeyProperty();
//             if (StringUtils.isNotEmpty(keyProperty)) {
//                 Object idVal = ReflectionKit.getMethodValue(cls, entity, keyProperty);
//                 // 不存在，设置id值，填充字段，走新增
//                 if (com.baomidou.mybatisplus.core.toolkit.StringUtils.checkValNull(idVal)) {
//                     try {
//                         Field fieldObj = cls.getDeclaredField(keyProperty);
//                     } catch (NoSuchFieldException e) {
//                         throw new RuntimeException(e);
//                     }
//                     // 填充主键
//                     BeanDealUtil.setFieldValue(entity, keyProperty, IdGeneratorUtil.getKeyId());
//                     // 填充其他字段
//                     CrudUtils.fillEntityField(entity, true);
//                     return insert(entity);
//                 } else {
//                     /*
//                      * 更新成功直接返回，失败执行插入逻辑
//                      */
//                     // 填充其他字段
//                     CrudUtils.fillEntityField(entity, false);
//                     if (updateById(entity) == 0) {
//                         return insert(entity);
//                     }
//                     return 1;
//                 }
//             } else {
//                 throw ExceptionUtils.mpe("错误: 不能执行. 找不到 @TableId.");
//             }
//         }
//         return 0;
//     }
//
//     public static boolean setFieldValue(Object bean, String field, Object value) {
//         Class<?> cls = bean.getClass();
//
//         try {
//             Field fieldObj = cls.getDeclaredField(field);
//             return setFieldValue(bean, fieldObj, value);
//         } catch (NoSuchFieldException var5) {
//             log.error(String.format("%s类【%s】字段找不到：%s", cls.getName(), field, var5.getMessage()), var5);
//             return false;
//         }
//     }
//
//
//
//
//     /* *******************************************service新增一个修改或者新增***************************** */
//
//     /**
//      * <p>
//      * 插入一条记录
//      * </p>
//      *
//      * @param entity 实体对象
//      */
//     //@Transactional(readOnly = false)
//     public int insert(T entity) {
//         return dao.insert(entity);
//     }
//
//     /**
//      * <p>
//      * 根据 ID 修改
//      * </p>
//      *
//      * @param entity 实体对象
//      */
//     //@Transactional(readOnly = false)
//     public int updateById(T entity) {
//         return dao.updateById(entity);
//     }
//
//
// }
